package file;

import java.io.File;
import java.io.FileFilter;

/**
 * 有条件的获取一个目录中的子项
 *
 * File[] listFiles(FileFilter filter)
 * 重载的listFiles方法要求我们传入一个文件过滤器，然后将该目录中符合过滤器要求的
 * 子项返回。
 */
public class ListFilesDemo2 {
    public static void main(String[] args) {
        //获取当前目录下的所有文本文件(名字是以".txt"结尾的)
        File dir = new File(".");
        if(dir.isDirectory()){
            //获取所有子项(无条件)
//            File[] subs = dir.listFiles();

            //定义一个文件过滤器
            FileFilter filter = new FileFilter(){
                /*
                    实现FileFilter接口后就必须重写方法accept(中文:接受)
                    该方法是用来定义过滤规则，将参数file作为过滤参照物。
                    如果当前方法返回true,则表示file符合过滤要求。否则为不符合
                 */
                public boolean accept(File file) {
                    //获取file表示的文件或目录的名字
                    String name = file.getName();
                    System.out.println("正在过滤:"+name);
                    //判断名字是否是以.txt结尾?
                    boolean endsWith = name.endsWith(".txt");
                    //要求file表示的:1:要是一个文件  2:名字要以.txt结尾
                    return file.isFile()&&endsWith;
                }
            };
            File[] subs = dir.listFiles(filter);

            System.out.println("子项个数:"+subs.length);
        }
    }
}

